home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 01 New Uploads / TMPREU10.SDA / TMP-GENERAL .DOC < prev    next >
Encoding:
Text File  |  2019-04-13  |  18.1 KB  |  696 lines

  1. == ================= ==
  2.    ╦EYBOARD ├ONTROLS
  3. == ================= ==
  4.  
  5.  ╘HE FOLLOWING KEY COMMANDS ARE
  6. ACTIVATED BY FIRST PRESSING THE '_'
  7. (LEFT ARROW) KEY, THEN THE COMMAND
  8. KEY. ┴ FEW KEY COMMANDS ACTIVATE A
  9. SMALL MENU OF KEY OPTIONS AND SEVERAL
  10. COMMANDS WILL PROMPT FOR A FILENAME
  11. OR OTHER DATA; SIMPLY FOLLOW THE
  12. PROMPTS.
  13.  
  14. ╦┼┘   ┴├╘╔╧╬
  15. 1     ┼XIT ╘ASS AND GO BACK TO ┬┴╙╔├
  16. !     ╙HOW A ╙┼╤ FILE ON SCREEN
  17.        (├┬═ PAUSES, ╥/╙ ABORTS)
  18. 2     ╧UTPUT A SEPARATOR LINE TO THE
  19.        CURRENT CURSOR LINE
  20. 3     ┴SSEMBLE TO BANK 0
  21. #     ┴SSEMBLE TO CURRENT OBJECT BANK
  22. 4     ╨RINT SOURCE (?: PRINTER,
  23.        *: SCREEN, <NAME>: FILE)
  24. 5     ┴SSEMBLE TO DISK
  25. 6     ═AKE .BYTE STATEMENTS FROM OBJECT
  26.        BANK
  27. 7     ╙ET RETURN TAB (COLUMN CURSOR
  28.        SITS AT AFTER A RETURN)
  29. 8     ╙ET SOURCE TAB (COLUMN OPCODE
  30.        SOURCE STARTS AT)
  31. +     ╨ERFORM HEXADECIMAL ADDITION
  32. -     ╨ERFORM HEXADECIMAL SUBTRACTION
  33. ─┼╠   ─ELETE LINE UNDER CURSOR
  34. ╔╬╙╘  ╠INE INSERT TOGGLE
  35. ^     ├OPY LINE UNDER CURSOR TO THE
  36.        LINE BUFFER
  37. #     ╨ASTE LINE BUFFER TO THE CURRENT
  38.        CURSOR LINE
  39. Q     ═OVE CURSOR TO COL. 0 (FAR LEFT)
  40. W     ╫RITE SOURCECODE TO DISK AS ╙┼╤
  41. E     ┼NTER A ╙┼╤ FILE FROM DISK,
  42.        TREATING LINES AS SOURCE CODE
  43. R     ╥EPLACE A STRING. ╨ROMPTS FOR
  44.        SEARCH AND REPLACEMENT STRINGS
  45.        AND THEN FINDS THE FIRST
  46.        OCCURANCE OF THE SEARCH STRING
  47. T     ┼XECUTES FIRST REPLACEMENT OF A
  48.        FOUND SEARCH STRING
  49. Y     ┼XECUTES REPLACEMENTS FOR ┴╠╠
  50.        OCCURANCES OF THE SEARCH STRING
  51. U     ╠IST LABELS (?: PRINTER,
  52.        *: SCREEN, <NAME>: FILE)
  53. I     ╞IND FIRST OCCURANCE OF GIVEN
  54.        LABEL STRING IN SOURCE
  55. @     ─ISKCOMMAND (@ FOR STATUS)
  56. *     ─IRECTORY (├┬═ PAUSE, ╥/╙ ABORT)
  57. A     ┼NTER ╨┼╘╙├╔╔ CODES (_ TO ABORT)
  58. S     ╙AVE SOURCE FILE TO DISK
  59. D     ─EVICE # INCREMENT (FINDS NEXT
  60.        AVAILABLE DRIVE ON SERIAL BUS)
  61. F     ╞IND FIRST OCCURANCE OF GIVEN
  62.        STRING IN SOURCE
  63. G     ╟OTO MARK
  64. H     ╞IND NEXT OCCURANCE OF SEARCH
  65.        STRING IN SOURCE
  66. K     ╥EDEFINE FKEY ╞3-╞6
  67. ╦     ╞-KEY RESET TO INTERNAL DEFAULTS
  68. L     ╠OAD SOURCE FILE FROM DISK
  69. :     ╠IST MARKS
  70. ;     ╦ILL MARK
  71. Z     ╒NDO LINE EDITING
  72. C     ├OLDSTART (KILLS SOURCE!)
  73. B     ┴CTIVATE BLOCK COMMANDS
  74.   W   ╫RITE BLOCK TO A ╙┼╤ FILE
  75.   C   ├OPY DEFINED BLOCK TO CURRENT
  76.        CURSOR POSITION
  77.   M   ═OVE DEFINED BLOCK TO CURRENT
  78.        CURSOR POSITION
  79.   K   ╦ILL DEFINED BLOCK
  80. N     ╟O TO SPECIFIC LINE NUMBER
  81. M     ╙ET MARKS (0-9 FOR MARKS,
  82.        S - BLOCK START, E - BLOCK END)
  83. =     ╩OIN REMAINDER OF CURRENT LINE
  84.        TO PRECEEDING LINE
  85. /     ─ELETE FROM CURSOR TO END OF
  86.        LINE
  87. ╥┼╘╒╥╬  ┬REAK CURRENT LINE INTO TWO
  88.          LINES AT CURSOR
  89. ╙╨┴├┼  ┬LANK CURRENT LINE
  90. ├╥╙╥-╥ ═OVE CURSOR TO COLUMN 39
  91. ├╥╙╥-╠ ═OVE CURSOR TO COLUMN 0
  92. ├╥╙╥-─ ═OVE CURSOR DOWN 200 LINES
  93. ├╥╙╥-╒ ═OVE CURSOR UP 200 LINES
  94. P     ┴CTIVATE PREFERENCE COMMANDS
  95.   0-6 ┼DITS COLOR OF GIVEN COLOR #
  96.   S   ┼DIT SEPERATOR TEMPLATE
  97.   ^   ╙AVE TURBO WITH NEW PREFERENCES
  98. ╥     ┴CTIVATE ╥┼╒ COMMANDS
  99.   L   ╠OAD FILE TO CURRENT OBJECT BANK
  100.   B   ┬ACKUP CURRENT SOURCE TO A BANK
  101.   O   ├HANGE BANK # OF OBJECT BANK
  102.   S   ├HANGE BANK # OF SOURCE BANK
  103.        (THIS ALSO SWAPS IN THE SOURCE
  104.        FROM THE GIVEN SOURCE BANK)
  105.   J   ╙ET LOCATION OF $40 BYTES OF
  106.        JUMPBACK CODE
  107.  
  108.  
  109.  ╫ITHOUT OTHER PREVIOUS KEYPRESSES:
  110.  
  111. ╦EY      ┴CTION
  112. ╔╬╙╘  ├HARACTER INSERT TOGGLE
  113. ╞1    ═OVE CURSOR UP 20 LINES
  114. ╞2    ╘OP OF SOURCE
  115. ╞7    ═OVE CURSOR DOWN 20 LINES
  116. ╞8    ┬OTTOM OF SOURCE
  117. ╞3    ═OVE CURSOR UP 200 LINES
  118. ╞4    ┴SSEMBLE AND START
  119. ╞5    ═OVE CURSOR DOWN 200 LINES
  120. ╞6    ╥┼╒ COMMANDS
  121.  
  122.  ╬OTE THAT ╞3-╞6 ARE REDEFINABLE.
  123.  
  124.  
  125. - --------------- -
  126.   ╥┼╒ ┼XPLANATION
  127. - --------------- -
  128.  
  129.  ╧UR ╥┼╒ MODIFICATION ALWAYS USES
  130. BANK 0 AS THE ASSEMBLY BANK. ─EFAULT
  131. OBJECT/SOURCE BANKS DEPEND ON WHAT
  132. SIZE OF ╥┼╒ IS DETECTED:
  133.  128K: SRC 0, OBJ 1
  134.  256+: SRC 2, OBJ 1
  135.  
  136.  ╬OTE THAT USERS OF 128K ╥┼╒ WILL ╬╧╘
  137. BE ABLE TO ALTER EITHER BANK USED. ┴LSO
  138. YOU WILL NOT BE ABLE TO BACKUP YOUR
  139. SOURCE BECAUSE OF THE 2 BANKS AVAILABLE
  140. BOTH ARE USED. ╞OR 256/512K USERS YOU
  141. HAVE BANKS 2-3 OR BANKS 2-7 OPEN FOR
  142. BANKING SOURCES.
  143.  ╫HEN YOU ASSEMBLE THE FOLLOWING WILL
  144. OCCUR: THE CURRENT OBJECT BANK WILL
  145. BE COPIED TO BANK 0, THEN CODE IS
  146. ASSEMBLED INTO BANK 0; C64 AND BANK 0
  147. ARE SWAPPED AND YOUR CODE EXECUTES.
  148. ┴ ROUTINE IS STORED AT $180 (THIS IS
  149. BY DEFAULT, IT IS ALTERABLE FROM THE
  150. ╥┼╒ COMMAND MENU) THAT WHEN JMP'ED
  151. TO REBANKS YOUR SOURCE FROM BANK 0
  152. AND RESTARTS TURBO.
  153.  ╘HE OBJECT AND SOURCE BANKS IN
  154. EFFECT ARE DISPLAYED IN THE STATUS
  155. LINE, AND (IF YOU HAVE A 256K/512K
  156. ╥┼╒) CAN BE SWITCHED TO ANY BANK
  157. EXCEPT BANK 0. ╧F COURSE IT IS
  158. HIGHLY ADVISED YOU DON'T USE THE
  159. SAME BANK FOR OBJECT AND SOURCE!
  160.  
  161.  
  162.  
  163. == ===================== ==
  164.    ╘URBO ═ACRO ╧PERATION
  165. == ===================== ==
  166.  
  167.  ╫HAT FOLLOWS NOW IS A DETAILED
  168. EXPLANATION OF ALL ASPECTS OF
  169. THE ASSEMBLER, INCLUDINGS A LOOK
  170. AT HOW CONSTANTS/EXPRESSIONS MAY
  171. BE DEFINED, AND A LIST OF ALL THE
  172. PSUEDO-OPS AVAILABLE WITH EXAMPLES
  173. WHERE NECESSARY!
  174.  
  175.  
  176. - ----------------- -
  177.   ├ONSTANT ╓ALUES
  178. - ----------------- -
  179.  
  180.  ├ONSTANT VALUES CAN BE EXPRESSED IN
  181. EITHER DECIMAL, HEXADECIMAL, BINARY,
  182. OR AS CHARACTERS NO PRECEEDING SYMBOL
  183. INDICATES A DECIMAL VALUE):
  184.  
  185.     $  DENOTES A HEXADECIMAL VALUE
  186.     %  DENOTES A BINARY VALUE
  187.   "A"  DENOTES A CHARACTER VALUE
  188.  
  189.  -=> ┼XAMPLES
  190.  
  191.   $20         HEX $20, DECIMAL  32
  192.   15          HEX $0F, DECIMAL  15
  193.   %10001000   HEX $88, DECIMAL 135
  194.   "1"         HEX $31, DECIMAL  49
  195.  
  196.  
  197. - ----------- -
  198.   ┼XPRESSIONS
  199. - ----------- -
  200.  
  201.  ┼XPRESSIONS IN ╘URBO ═ACRO ╨RO CAN BE
  202. FORMED WITH THE FOLLOWING OPERATORS,
  203. ALL OF WHICH ARE BINARY OPERATORS
  204. (MEANING THEY REQUIRE A VALUE ON THE
  205. RIGHT ┴╬─ LEFT SIDE OF THE OPERATOR):
  206.  
  207.   +   FOR ADDITION
  208.   -   FOR SUBTRACTION
  209.   *   FOR MULTIPLICATION
  210.   /   FOR DIVISION
  211.   &   FOR BITWISE AND
  212.   .   FOR BITWISE OR
  213.   :   FOR BITWISE EOR
  214.  
  215.  ╓ALUES USED WITH EXPRESSIONS CAN BE
  216. CONSTANT VALUES DESCRIBED ABOVE, OR
  217. LABELS. ╬OTE THAT YOU CAN ALSO USE
  218. PARENTHESIS AND AS YOU WOULD EXPECT
  219. THEY AFFECT THE ORDER IN WHICH THE
  220. EXPRESSION IS EVALUATED:
  221.  
  222.  -=> ┼XAMPLES
  223.  
  224.   $20 + 4         = HEX $24, DEC  36
  225.   15 - %00000011  = HEX $0C, DEC  12
  226.   $FF & $F0       = HEX $F0, DEC 240
  227.   (2*$10)+1       = HEX $21, DEC  33
  228.   2*($10+1)       = HEX $22, DEC  34
  229.  
  230.  
  231.  ╘HE '*' HAS A DIFFERENT MEANING WHEN
  232. IT IS USED AS A VALUE AND NOT AN
  233. OPERATOR. ╙ETTING * EQUAL TO A VALUE
  234. CHANGES THE CURRENT PROGRAM COUNTER
  235. THE ASSEMBLER IS USING. ┘OU CAN RESET
  236. THE VALUE OF * THROUGHOUT YOUR CODE.
  237. ┘OU SHOULD ALWAYS SET * AT THE TOP OF
  238. YOUR SOURCE TO ENSURE TASS BEGINS
  239. ASSEMBLING WHERE YOU EXPECT IT TO.
  240.  ╘HE VALUE OF * IN EXPRESSIONS IS
  241. ALWAYS THE CURRENT PROGRAM COUNTER.
  242.  
  243.  -=> ┼XAMPLES
  244.  
  245.   *= $1000   SETS THE PROGRAM COUNTER
  246.               TO $1000; CODE STARTS
  247.               ASSEMBLING THERE
  248.   LDA #>(*)  ASSEMBLES AS LDA #$10
  249.   BNE *+5    THIS BRANCH USES * TO
  250.               SKIP A FOLLOWING JMP
  251.               OPCODE
  252.  
  253.  
  254.  ┼XPRESSIONS CAN ALSO BE MODIFIED BY
  255. THE FOLLOWING CHARACTERS:
  256.  
  257.   <    DENOTES THAT THE LOW BYTE OF
  258.         THE FOLLOWING CONSTANT OR
  259.         EXPRESSION SHOULD BE TAKEN
  260.   >    DENOTES THAT THE HI BYTE OF
  261.         THE FOLLOWING CONSTANT OR
  262.         EXPRESSION SHOULD BE TAKEN
  263.   #    DENOTES THAT THE ASSEMBLER MUST
  264.         TREAT THE FOLLOWING VALUE AND
  265.         THE OPCODE USING IT AS AN
  266.         IMMEDIATE ADDRESSING SITUATION
  267.   !    DENOTES AN EXPRESSION WHOSE
  268.         VALUE MAY CURRENTLY OR LATER
  269.         BE DETERMINED AS 1 BYTE BUT
  270.         WHICH SHOULD BE EXPANDED INTO
  271.         2 BYTES. ╙EE BELOW FOR AN
  272.         EXAMPLE.
  273.  
  274.  -=> ┼XAMPLES
  275.  
  276.   >$0314          = HEX $03
  277.   <$0400+(6*$28)  = HEX $F0
  278.   LDA #$28        ASSEMBLES AS A9 28
  279.   LDA $28         ASSEMBLES AS A5 28
  280.  
  281.  
  282.  ┼XAMPLES OF THE USE OF '!' ARE SHOWN
  283. BELOW. ╦EEP IN MIND THAT THE TASS
  284. EDITOR WILL NOT ALLOW YOU TO ENTER A
  285. CONSTANT VALUE LIKE $0002 OR $00FF;
  286. IT AUTOMATICALLY SHORTENS IT TO $02
  287. OR $FF. ╘HIS MAY BE SEEN AS A
  288. DEFICIENCY OF TASS BUT YOU HAVE A WAY
  289. AROUND THIS WHEN YOU REALLY NEED TO
  290. SPECIFY TO THE ASSEMBLER LINES LIKE
  291. LDA $0002:
  292.  
  293.   LDA $02    ASSEMBLES AS LDA $02
  294.   LDA !$02   ASSEMBLES AS LDA $0002
  295.  
  296.  ┴NOTHER USE IS TO PREVENT PHASE
  297. ERRORS. ┴ PHASE ERROR OCCURS WHEN THE
  298. LENGTH OF CODE DETERMINED BY PASS ONE
  299. AND PASS TWO OF THE ASSEMBLER DO NOT
  300. MATCH. ╧NE WAY THIS CAN OCCUR IS BY
  301. LABELS REFERENCED BEFORE THEY ARE
  302. DEFINED:
  303.  
  304.          LDA BAH  ; BAH IS UNDEFINED
  305.          RTS
  306. BAH = $02         ; BAH IS NOW DEFINED
  307.  
  308.  ┴SSEMBLING THIS CODE BLOCK RESULTS IN
  309. A PHASE ERROR, BECAUSE TASS ASSUMES
  310. UNDEFINED LABELS REPRESENT WORDS
  311. DURING THE FIRST PASS. ╔F THE LABEL IS
  312. THEN FOUND DEFINED AS A BYTE VALUE,
  313. THE SECOND PASS WILL BE SHORTER THAN
  314. THE FIRST AND A PHASE ERROR STRIKES.
  315. ╘O PREVENT THE PHASE ERROR CHANGE THE
  316. CODE TO LOOK LIKE:
  317.  
  318.          LDA !BAH
  319.          RTS
  320. BAH = $02
  321.  
  322.  ╘HE '!' TELLS TASS THAT THE
  323. EXPRESSION FOLLOWING SHOULD BE
  324. TREATED AS A WORD NO MATTER HOW THE
  325. LABEL WAS DEFINED.
  326.  ╧BVIOUSLY THE BEST CHOICE WOULD BE
  327. TO DEFINE LABELS BEFORE REFERENCING
  328. THEM BUT IN OUR OWN EXPERIENCE THIS
  329. IS SOMETIMES UNDESIRED SO USING '!'
  330. NOTATION WILL HELP AVOID THE WOES OF
  331. PHASE ERRORS.
  332.  
  333.  
  334. - -------- -
  335.   ├OMMENTS
  336. - -------- -
  337.  
  338.  ┘OU CAN ADD COMMENTS TO YOUR SOURCE
  339. CODE BY USING THE ';' (SEMICOLON). ┴NY
  340. ';' FOUND BY TURBO WILL CAUSE THE
  341. ASSEMBLER TO IGNORE WHATEVER FOLLOWS
  342. THE ';' TIL THE END OF THAT LINE. ╙O
  343. COMMENTS CAN FOLLOW AN OPCODE, OR A
  344. PSUEDO-OP, OR THEY CAN BE ON A LINE BY
  345. THEMSELVES.
  346.  
  347.  -=> ┼XAMPLE
  348.  
  349.    ; THIS IS A COMMENT
  350.   LDA #$01   ; THIS IS A COMMENT
  351.   STA $D020  ; SO IS THIS!
  352.  
  353.  
  354. - ---------------- -
  355.   ╘ABLE ╨SUEDO-OPS
  356. - ---------------- -
  357.  
  358.  ╘HE TABLE PSUEDO-OPS ARE THE STANDARD
  359. WAY TO MAKE DATA OR STRING TABLES.
  360.  
  361.   .BYTE  - TAKES A LIST OF BYTE VALUES
  362.             WHICH CAN BE DECIMAL, HEX,
  363.             BINARY OR CHARACTERS
  364.             (DENOTED BY A STRING WITH
  365.             ONE CHARACTER) AND
  366.             PRODUCES A TABLE OF BYTES.
  367.   .WORD  - TAKES A LIST OF WORD VALUES
  368.             WHICH CAN BE DECIMAL, HEX,
  369.             OR BINARY AND PRODUCES A
  370.             TABLE OF BYTES WHERE THE
  371.             WORDS ARE ARRANGED IN
  372.             LOW-BYTE HI-BYTE ORDER.
  373.   .RTA   - TAKES A LIST OF WORD VALUES
  374.             WHICH CAN BE DECIMAL, HEX,
  375.             OR BINARY AND PRODUCES A
  376.             TABLE OF BYTES WHERE THE
  377.             WORDS ARE DECREMENTED BY
  378.             1 AND SET IN LOW-BYTE
  379.             HI-BYTE ORDER; THIS IS
  380.             USEFUL FOR DOING STACK
  381.             MANIPULATION WITH E.G.
  382.             RETURN ADDRESSES.
  383.   .TEXT  - TAKES A STRING AND PRODUCES
  384.             FROM IT A TABLE OF BYTES.
  385.   .NULL  - TAKES A STRING AND PRODUCES
  386.             FROM IT A TABLE OF BYTES
  387.             TERMINATED WITH A NULL
  388.             (0) BYTE.
  389.   .SHIFT - TAKES A STRING AND PRODUCES
  390.             FROM IT A TABLE OF BYTES
  391.             WHERE THE LAST BYTE HAS
  392.             IT'S HIGH-BIT SET TO 1.
  393.  
  394.  -=> ┼XAMPLES
  395.  
  396.   .BYTE 25,"A",$CC   =   $19 $41 $CC
  397.   .TEXT "HI"         =   $48 $49
  398.   .NULL "HI"         =   $48 $49 $00
  399.   .SHIFT "HI"        =   $48 $C9
  400.   .WORD $FCE2        =   $E2 $FC
  401.   .RTA $FCE2         =   $E1 $FC
  402.  
  403.  
  404. - -------------------------- -
  405.   ╨RINTER ├ONTROL ╨SUEDO-OPS
  406. - -------------------------- -
  407.  
  408.  ╘HE PRINTER PSUEDO-OPS ALLOW SOME
  409. CONTROL DURING PRINTING OF SOURCE TO
  410. PRINTER, DISK, OR SCREEN (ACTIVATED
  411. WITH KEY COMMAND BACK-ARROW+4).
  412. .PROFF AND .PRON ALLOW YOU TO SKIP
  413. PRINTING SECTIONS OF CODE, WHILE
  414. .HIDEMAC AND .SHOWMAC LET YOU CONTROL
  415. WHETHER THE EXPANDED MACRO GETS
  416. PRINTED OR JUST THE MACRO CALL (SEE
  417. BELOW).
  418.  
  419.   .PRON     - TURN ON PRINTING
  420.   .PROFF    - TURN OFF PRINTING
  421.   .HIDEMAC  - SHOW UNEXPANDED CALLS
  422.   .SHOWMAC  - SHOW EXPANDED CALLS
  423.  
  424.  
  425. - ------------------------------- -
  426.   ├ONDITIONAL ┴SSEMBLY ╨SUEDO-OPS
  427. - ------------------------------- -
  428.  
  429.  ╘HESE PSUEDO-OPS ALLOW ╘URBO ═ACRO TO
  430. ASSEMBLE CHUNKS OF CODE BASED ON THE
  431. EVALUATION OF AN EXPRESSION - IF IT'S
  432. EQUAL OR NOT EQUAL TO ZERO OR IF IT'S
  433. POSITIVE OR NEGATIVE. ┘OU CAN USE THE
  434. FUNCTIONALITY TO SELECTIVELY ASSEMBLE
  435. CODE BASED ON THE VALUE OF A LABEL,
  436. FOR EXAMPLE, OR EVEN THE CURRENT VALUE
  437. OF THE PROGRAM COUNTER.
  438.  
  439.   .IF     - TESTS VALUE OR EXPRESSION
  440.              FOR INEQUALITY WITH ZERO,
  441.              SAME AS .IFNE
  442.   .IFNE   - TESTS VALUE OR EXPRESSION
  443.              FOR INEQUALITY WITH ZERO,
  444.              SAME AS .IF
  445.   .IFEQ   - TESTS VALUE OR EXPRESSION
  446.              FOR EQUALITY WITH ZERO
  447.   .IFPL   - TESTS VALUE OR EXPRESSION
  448.              FOR POSITIVE
  449.   .IFMI   - TESTS VALUE OR EXPRESSION
  450.              FOR NEGATIVE
  451.   .ENDIF  - MARKS THE END OF CODE
  452.              ASSEMBLED BY ANY .IF
  453.              TAKEN
  454.  
  455.  -=> ┼XAMPLES
  456.  
  457. CYCLE = 65
  458.      .IFNE CYCLE-65 ;IF CYCLE != 65
  459.      NOP            ;PRODUCE ONE NOP
  460.      .ENDIF
  461.  
  462.  
  463. - ---------------- -
  464.   ┬LOCK ╨SUEDO-OPS
  465. - ---------------- -
  466.  
  467.  ╘HE BLOCK PSUEDO-OPS ALLOW A VERY
  468. USEFUL OPERATION: BLOCKING OFF A
  469. SECTION OF CODE SO THAT IT CAN CONTAIN
  470. ITS OWN LOCAL LABELS, WHICH CAN BE
  471. USED AGAIN IN THE OUT-OF-BLOCK CODE
  472. OR WITHIN A DIFFERENT BLOCK! ╬ORMAL
  473. TASS DISALLOWS REUSING LABELS. ╒SING
  474. BLOCKS YOU CAN CREATE SUBROUTINE
  475. LIBRARIES FOR YOUR OWN USE! ╬EED A
  476. DOTPLOTTER IN YOUR PROGRAM? ╠OAD THE
  477. DOTPLOTTER SUBROUTINE FROM YOUR DISK
  478. AND IF YOU BLOCKED IT, YOU DON'T NEED
  479. TO WORRY ABOUT CHANGING ANY LABELS IN
  480. YOUR MAIN PROGRAM THAT WOULD NORMALLY
  481. CONFLICT WITH LABELS IN THE
  482. SUBROUTINE.
  483.  
  484.   .BLOCK  - STARTS A CODE BLOCK
  485.   .BEND   - ENDS A CODE BLOCK
  486.  
  487.  
  488. - ------------------- -
  489.   ╓ARIABLE ╨SUEDO-OPS
  490. - ------------------- -
  491.  
  492.  ╓ARIABLES DEFINE LABELS THAT CAN BE
  493. REDEFINED. ╘HIS IS THE ONLY WAY TO
  494. CHANGE THE VALUE OF A LABEL IN THE
  495. SAME CONTEXT (I.E. IN THE SAME BLOCK
  496. OR IN THE MAIN CODE) WITHOUT GETTING
  497. A 'DOUBLE DEFINED' ERROR.
  498.  
  499.   .VAR - DEFINES A VARIABLE IDENTIFIED
  500.           BY THE LABEL PRECEEDING
  501.           '.VAR', TAKING THE VALUE
  502.           DEFINED BY THE EXPRESSION
  503.           FOLLOWING THE '.VAR'.
  504.  
  505.  -=> ┼XAMPLES
  506.  
  507. VA    .VAR $01   ;DEFINES A VAR NAMED
  508.                  ; VA WITH VALUE OF 1
  509.       LDA #VAR   ;RESULTS IN LDA #$01
  510. VA    .VAR VA+1  ;REDEFINES VA TO
  511.                  ; IT'S CURRENT VALUE+1
  512.       LDA #VAR   ;RESULTS IN LDA #$02
  513.  
  514.  
  515. - ---------------- -
  516.   ═ACRO ╨SUEDO-OPS
  517. - ---------------- -
  518.  
  519.  ═ACROS ARE A MEANS OF INSERTING A
  520. LARGER CHUNK OF CODE BY USING A SHORT
  521. MACRO-LABEL FOLLOWED BY 0 TO 8
  522. ARGUMENTS. ╘HIS MACRO-LABEL IS
  523. EXPANDED INTO THE CHUNK OF CODE AT
  524. ASSEMBLY TIME, WITH SUBSTITUTIONS
  525. MADE FOR ARGUMENTS GIVEN. ┴ MACRO
  526. CALL IS IDENTIFIED BY A '#' FOLLWED
  527. BY THE MACRO-LABEL.
  528.  
  529.   .MACRO    - STARTS A MACRO
  530.                DEFINITION AND
  531.                AUTOMATICALLY MAKES A
  532.                BLOCK AROUND THE MACRO
  533.   .SEGMENT  - STARTS A MACRO
  534.                DEFINITION BUT WITHOUT
  535.                A BLOCK
  536.   .ENDM     - ENDS A MACRO DEFINITION
  537.  
  538.  -=> ┼XAMPLES
  539.  
  540. POKE   .MACRO    ;START MACRO DEF
  541.        LDA #\2   ;THE \2 MEANS AN
  542.                  ; ARGUMENT
  543.                  ; SUBSTITUTION, IN
  544.                  ; THIS CASE THE
  545.                  ; SECOND MACRO ARG
  546.                  ; WILL REPLACE THE \2
  547.        STA \1    ;ANOTHER SUBSTITUTION
  548.        .ENDM     ;END MACRO DEF
  549.  
  550.  ╔N YOUR CODE YOU TYPE:
  551.  
  552.        #POKE $D020,0
  553.  
  554.  ╒PON ASSEMBLY THAT MACRO CALL IS
  555. EXPANDED, AND SUBSTITUTIONS ARE MADE
  556. (IN THIS CASE \1 IS REPLACED BY $D020
  557. AND \2 IS REPLACED BY 0) RESULTING IN
  558. THE FOLLOWING ASSEMBLY BEING GENERATED:
  559.  
  560.        LDA #$00
  561.        STA $D020
  562.  
  563.  ╚ERE IS A MORE COMPLEX EXAMPLE SHOWING
  564. RECURSION WITH MACROS:
  565.  
  566. TABLE .MACRO     ;START MACRO DEF
  567. CNT   .VAR \1+1  ;SET VAR CNT TO ARG 1
  568.                  ; PLUS 1
  569.       #TAB       ;A MACROCALL WITHIN
  570.                  ; A MACRO!
  571.       .ENDM      ;END MACRO DEF
  572.  
  573. TAB   .SEGMENT   ;START MACRO DEF
  574. CNT   .VAR CNT-1 ;DECREMENT CNT
  575.       .IF CNT    ;IF CNT != 0
  576.       #TAB       ;THEN MACROCALL
  577.                  ; ITSELF (TAB)
  578.       .ENDIF     ;END OF THE IF
  579.       .BYTE CNT  ;ASSEMBLE A BYTE WITH
  580.                  ; CURRENT VALUE OF CNT
  581. CNT   .VAR CNT+1 ;INCREMENT CNT
  582.       .ENDM      ;END MACRO DEF
  583.  
  584.        #TABLE 5  ;CALL THE MACRO
  585.                  ; TO CREATE A BYTE
  586.                  ; TABLE FROM 0 TO 5
  587.  
  588.  
  589.  ╚ERE IS AN EXAMPLE OF USING A TEXT
  590. PARAMETER IN A MACRO DEFINITION AND
  591. CALL:
  592.  
  593. ERROR  .MACRO      ;START MACRO DEF
  594.        LDA #<TX    ;LO-BYTE OF TX
  595.        LDY #>TX    ;HI-BYTE OF TX
  596.        JSR $AB1E   ;PRINT IT
  597.        JMP END     ;SKIP TEXT DATA
  598. TX     .NULL "@1"  ;@1 IS REPLACED BY A
  599.                    ; TEXTUAL ARGUMENT
  600. END    .ENDM       ;END MACRO DEF
  601.  
  602.  
  603.  ╙O YOU SEE, USE \X FOR NUMERICAL
  604. ARGUMENTS, AND @X FOR TEXT ARGUMENTS,
  605. WHERE X DENOTES THE ARGUMENT NUMBER.
  606.  
  607.  ╘EXT ARGUMENTS CAN BE USED TO MODIFY
  608. THE OPCODES THEMSELVES! ┼XAMPLE:
  609.  
  610. DO     .SEGMENT
  611.        .BLOCK
  612. LOOP   .ENDM
  613.  
  614. WHILE  .SEGMENT    ;START MACRO DEF
  615.        B@1 LOOP    ;THE @1 WILL BE
  616.                    ; REPLACED BY A
  617.                    ; TEXT ARGUMENT
  618.        .BEND
  619.        .ENDM       ;END MACRO DEF
  620.  
  621.        LDX #5      ;START OF CODE
  622.        #DO         ;CALL MACRO DO
  623.        LDY #2
  624.        LDA #"*"
  625.        #DO         ;CALL MACRO DO
  626.        JSR $FFD2
  627.        DEY
  628.        #WHILE "PL" ;CALL MACRO
  629.                    ; 'WHILE' USING
  630.                    ; PARAMETER "PL"
  631.        LDA #" "    ;PRINT SPACE
  632.        JSR $FFD2
  633.        DEX
  634.        #WHILE "NE" ; CALL MACRO
  635.                    ; 'WHILE' WITH
  636.                    ; PARAMETER "NE"
  637.  
  638.  
  639. - ---------------------------------- -
  640.   ╒NCONDITIONAL ┬RANCHING ╨SUEDO-OPS
  641. - ---------------------------------- -
  642.  
  643.  ╘HESE PSUEDO-OPS ALLOW YOU TO FORCE
  644. THE ASSEMBLER TO JUMP TO A GIVEN LABEL
  645. AND CONTINUE ASSEMBLING FROM THERE.
  646. ╘HIS CAN BE EXTREMELY USEFUL FOR
  647. REPEATING A BYTE OR SHORT CODE BLOCK
  648. 10, 100, OR EVEN MORE TIMES. ╧NLY
  649. LABELS FLAGGED WITH A .LBL PSUEDO-OP
  650. CAN BE REFERENCED BY A .GOTO!
  651.  
  652. .LBL     - IDENTIFIES A LABEL THAT
  653.             CAN BE USED BY A .GOTO
  654. .GOTO    - CAUSES ASSEMBLER TO GOTO
  655.             THE LABEL REFERENCED AND
  656.             CONTINUE ASSEMBLING FROM
  657.             THAT POINT ON
  658.  
  659.  -=> ┼XAMPLES
  660.  
  661. CNT  .VAR $0100    ;CNT = $100
  662. LOOP   .LBL        ;LABEL 'LOOP' IS
  663.                    ; PREPARED TO BE
  664.                    ; A .GOTO TARGET
  665.        NOP
  666. CNT  .VAR CNT-1    ;DEC CNT
  667.        .IF CNT     ;IF CNT != 0
  668.        .GOTO LOOP  ;GOTO LOOP
  669.        .ENDIF      ;UNTIL ALL $100
  670.                    ; NOP'S ARE
  671.                    ; ASSEMBLED
  672.  
  673.  
  674. - ------------------- -
  675.   ╔NCLUDING ╨SUEDO-OP
  676. - ------------------- -
  677.  
  678.  ╘HE .INCLUDE PSUEDO-OP ALLOWS YOU TO
  679. ASSEMBLE IN LARGE CHUNKS OF CODE OR
  680. LABEL DATA. ╞OR EXAMPLE, YOU COULD USE
  681. .INCLUDE TO ASSEMBLE IN A ╙┼╤ FILE
  682. WITH LABEL DEFINITIONS FOR ALL OF THE
  683. KERNAL JUMPTABLE, OR YOU COULD KEEP
  684. SMALL SUBROUTINES IN ╙┼╤ FORM AND
  685. INCLUDE THEM IN AS YOU NEED THEM.
  686.  
  687.   .INCLUDE - LOAD AND ASSEMBLE A
  688.               SPECIFIED FILE FROM DISK
  689.               DURING THE CURRENT
  690.               ASSEMBLY; THE FILE MUST
  691.               BE A ╙┼╤ FILE!
  692.  
  693.  
  694.  ***** V1.0  01/05/96
  695.  
  696.